/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package biermanager.nucleo;

import java.util.ArrayList;

/**
 *
 * @author Tiago Silva Loureiro
 */
public class Conta {

    private String identificador;
    private ArrayList<Usuario> usuarios;
    private ArrayList<Time> times;
    private ArrayList<Arbitro> arbitros;
    private ArrayList<Quadra> quadras;
    private ArrayList<Temporada> temporadas;
    private ConfiguracoesDeJogo configuracoesDeJogo;

    public Conta() {
        this.identificador = null;
        this.usuarios = null;
        this.times = null;
        this.arbitros = null;
        this.quadras = null;
        this.temporadas = null;
        this.configuracoesDeJogo = null;
    }

    public Conta(String identificador, ArrayList<Usuario> usuarios, ArrayList<Time> times, ArrayList<Arbitro> arbitros, ArrayList<Quadra> quadras, ArrayList<Temporada> temporadas, ArrayList<EstatisticasCompeticao> estatisticas, ArrayList<PontosDeExperiencia> pontosDeExperiencia, ArrayList<Integer> indicesTimeUsuarios, ConfiguracoesDeJogo configuracoes) {
        this.identificador = identificador;
        this.usuarios = usuarios;
        this.times = times;
        this.arbitros = arbitros;
        this.quadras = quadras;
        this.temporadas = temporadas;
        this.configuracoesDeJogo = configuracoes;
    }

    public Conta(Usuario usuario, Temporada temporada, EstatisticasCompeticao estatisticas, ConfiguracoesDeJogo configuracoes, int pontosDeExperiencia, int indiceTimeAtual) {
        this.configuracoesDeJogo = configuracoes;
        this.times = null;
        this.arbitros = null;
        this.quadras = null;
    }

    public Conta(Usuario usuario) {
        this.configuracoesDeJogo = null;
    }

    public boolean addObjeto(Object o) {
        boolean resultadoAdicao = false;
        Class<?> tipo = o.getClass();
        try {
            if (tipo.isInstance(Usuario.class)) {
                resultadoAdicao = this.usuarios.add((Usuario) o);
                return resultadoAdicao;
            }
            if (tipo.isInstance(Time.class)) {
                resultadoAdicao = this.times.add((Time) o);
                return resultadoAdicao;
            }
            if (tipo.isInstance(Arbitro.class)) {
                resultadoAdicao = this.arbitros.add((Arbitro) o);
                return resultadoAdicao;
            }
            if (tipo.isInstance(Quadra.class)) {
                resultadoAdicao = this.quadras.add((Quadra) o);
                return resultadoAdicao;
            }
            if (tipo.isInstance(Temporada.class)) {
                resultadoAdicao = this.temporadas.add((Temporada) o);
                return resultadoAdicao;
            }
        } catch (NullPointerException n) {
            //TODO: tratar exceção caso insercao de nulo
        }
        return resultadoAdicao;
    }

    public boolean removerObjeto(Object o) {
        boolean resultadoRemocao = false;
        Class<?> tipo = o.getClass();
        if (tipo.isInstance(Usuario.class)) {
            resultadoRemocao = this.usuarios.remove(o);
            return resultadoRemocao;
        }
        if (tipo.isInstance(Time.class)) {
            resultadoRemocao = this.times.remove(o);
            return resultadoRemocao;
        }
        if (tipo.isInstance(Arbitro.class)) {
            resultadoRemocao = this.arbitros.remove(o);
            return resultadoRemocao;
        }
        if (tipo.isInstance(Quadra.class)) {
            resultadoRemocao = this.quadras.remove(o);
            return resultadoRemocao;
        }
        if (tipo.isInstance(Temporada.class)) {
            resultadoRemocao = this.temporadas.remove(o);
            return resultadoRemocao;
        }
        return resultadoRemocao;
    }

    public void setIdentificador(String identificador) {
        this.identificador = identificador;
    }

    public void setUsuarios(ArrayList<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public void setUsuarios(Usuario[] usuarios) {
        this.usuarios = new ArrayList<Usuario>();
        for (int i = 0; i < usuarios.length; i++) {
            this.usuarios.add(usuarios[i]);
        }
    }

    public void setTimes(ArrayList<Time> times) {
        this.times = times;
    }

    public void setTimes(Time[] times) {
        this.times = new ArrayList<Time>();
        for (int i = 0; i < times.length; i++) {
            this.times.add(times[i]);
        }
    }

    public void setArbitros(ArrayList<Arbitro> arbitros) {
        this.arbitros = arbitros;
    }

    public void setArbitros(Arbitro[] arbitros) {
        this.arbitros = new ArrayList<Arbitro>();
        for (int i = 0; i < arbitros.length; i++) {
            this.arbitros.add(arbitros[i]);
        }
    }

    public void setQuadras(ArrayList<Quadra> quadras) {
        this.quadras = quadras;
    }

    public void setQuadras(Quadra[] quadras) {
        this.quadras = new ArrayList<Quadra>();
        for (int i = 0; i < quadras.length; i++) {
            this.quadras.add(quadras[i]);
        }
    }

    public void setTemporadas(ArrayList<Temporada> temporadas) {
        this.temporadas = temporadas;
    }

    public void setTemporadas(Temporada[] temporadas) {
        this.temporadas = new ArrayList<Temporada>();
        for (int i = 0; i < temporadas.length; i++) {
            this.temporadas.add(temporadas[i]);
        }
    }

/*    public void setEstatisticas(ArrayList<EstatisticasCompeticao> estatisticas) {
        this.estatisticas = estatisticas;
    }

    public void setEstatisticas(EstatisticasCompeticao[] estatisticas) {
        for (int i = 0; i < estatisticas.length; i++) {
            this.estatisticas.add(estatisticas[i]);
        }
    }*/

    public void setConfiguracoesDeJogo(ConfiguracoesDeJogo configuracoes) {
        this.configuracoesDeJogo = configuracoes;
    }

    public ArrayList<Arbitro> getArbitros() {
        return arbitros;
    }

    public ConfiguracoesDeJogo getConfiguracoesDeJogo() {
        return configuracoesDeJogo;
    }

    public String getIdentificador() {
        return identificador;
    }

    public ArrayList<Quadra> getQuadras() {
        return quadras;
    }

    public ArrayList<Temporada> getTemporadas() {
        return temporadas;
    }

    public ArrayList<Time> getTimes() {
        return times;
    }

    public ArrayList<Usuario> getUsuarios() {
        return usuarios;
    }
}
